package com.zsix.system.service;

import com.zsix.common.common.BusinessException;
import com.zsix.common.dto.controllerParams.GroupUsersParams;
import com.zsix.common.dto.controllerParams.UserParams;
import com.zsix.common.dto.orgDto.SysRoleDept;
import com.zsix.common.dto.orgDto.SysRoleDto;
import com.zsix.common.entity.orgmanagement.*;

import java.util.HashMap;
import java.util.List;

public interface IOrgManagementService {
    /**
     * 获取公司列表
     * @return
     */
    List<CompanyEntity> getCompanyList();

    /**
     * 增加公司
     * @param companyEntity
     * @return
     */
    String addCompany(CompanyEntity companyEntity);

    /**
     * 修改公司信息
     * @param companyEntity
     * @return
     */
    String updateCompany(CompanyEntity companyEntity);

    /**
     * 删除公司信息
     * @param companyEntity
     * @return
     */
    String deleteCompany(CompanyEntity companyEntity);

    /**
     * 获取部门列表
     * @return
     */
    List<DepartmentEntity> getDepartmentList(DepartmentEntity departmentEntity);

    /**
     * 获取部门树
     * @return
     */
    List<DepartmentEntity> getDepartmentEntityList();
    /**
     * 获取部门人员
     * @return
     */
    List<UserEntity> getDeptUsers(DepartmentEntity departmentEntity);

    /**
     * 获取部门人员树
     * @return
     */
    List<UserEntity> getDeptUserTree();

    /**
     * 根据公司下的部门
     * @param companyId
     * @return
     */
    List<DepartmentEntity> getDeptByCompany(Integer companyId);
    /**
     * 增加部门
     * @param departmentEntity
     * @return
     */
    String addDepartment(DepartmentEntity departmentEntity);

    /**
     * 修改部门
     * @param departmentEntity
     * @return
     */
    String updateDepartment(DepartmentEntity departmentEntity);

    /**
     * 删除部门
     * @param departmentEntity
     * @return
     */
    String deleteDepartment(DepartmentEntity departmentEntity);

    /**
     * 设置部门负责人
     * @param departmentEntity
     * @return
     */
    String setDepartmentManager(DepartmentEntity departmentEntity);

    /**
     * 设置部门分管领导
     * @param departmentEntity
     * @return
     */
    String setDepartmentLeader(DepartmentEntity departmentEntity);

    /**
     * 设置所属公司
     * @param departmentEntity
     * @return
     */
    String updateDeptCompany(DepartmentEntity departmentEntity);

    /**
     * 获取组织结构数据
     * @return
     */
    HashMap<String,Object> getOrgData();

    /**
     * 获取岗位列表--分页
     * @param positionEntity
     * @return
     */
    List<PositionEntity> positionListPage(PositionEntity positionEntity);

    /**
     * 根据用户的岗位
     * @param username
     * @return
     */
    List<PositionEntity> positionListByUser(String username);

    /**
     * 获取岗位成员
     * @param positionEntity
     * @return
     */
    List<UserEntity>  getPositionUser(PositionEntity positionEntity);

    /**
     * 增加岗位
     * @param positionEntity
     * @return
     */
    String addPosition(PositionEntity positionEntity);

    /**
     * 更新岗位信息
     * @param positionEntity
     * @return
     */
    String updatePosition(PositionEntity positionEntity);

    /**
     * 删除岗位
     * @param positionEntity
     * @return
     */
    String deletePosition(PositionEntity positionEntity);

    /**
     * 删除用户的岗位
     * @param username
     * @return
     */
    String deletePositionUser(String username);

    /**
     * 获取角色列表
     * @return
     */
    List<RolesEntity> rolesList();

    /**
     * 角色部门
     * @param id
     * @return
     */
    List<SysRoleDept> roleDeptTreeselect(String id);

    /**
     * 获取角色列表--分页
     * @param roles
     * @return
     */
    List<RolesEntity> rolesListPage(RolesEntity roles);

    /**
     * 获取用户的角色
     * @param username
     * @return
     */
    List<RolesEntity> rolesListByUser(String username);

    /**
     * 获取岗位成员
     * @param roles
     * @return
     */
    List<UserEntity> getRoleUsers(RolesEntity roles);
    /**
     * 增加角色
     * @param sysRoleDto
     * @return
     */
    String addRoles(SysRoleDto sysRoleDto);

    /**
     * 修改角色信息
     * @param sysRoleDto
     * @return
     */
    String updateRoles(SysRoleDto sysRoleDto);

    /**
     * 删除角色
     * @param sysRoleDto
     * @return
     */
    String deleteRoles(SysRoleDto sysRoleDto);

    /**
     * 删除用户的角色
     * @param username
     * @return
     */
    String deleteRoleUser(String username);

    /**
     * 获取人员列表--分页
     * @param userEntity
     * @return
     */
    List<UserEntity>  getUserList(UserEntity userEntity);

    /**
     * 获取人员详细信息
     * @param username
     * @return
     */
    HashMap<String,Object> getUserEntity(String username);

    /**
     * 根据部门编号查找人员
     * @param departid
     * @return
     */
    List<UserEntity> getUserByDepartId(String departid);

    /**
     * 增加人员
     * @param param
     * @return
     */
    String addUser(UserParams param) throws BusinessException;

    /**
     * 修改人员信息
     * @param param
     * @return
     */
    String updateUser(UserParams param);

    /**
     * 修改密码
     * @param param
     * @return
     */
    String updatePwd(UserParams param);

    /**
     * 重置密码
     * @param param
     * @return
     */
    String resetPwd(UserParams param);

    /**
     * 删除用户
     * @param userEntity
     * @return
     */
    String deleteUser(UserEntity userEntity);

    /**
     * 获取用户分组分页
     * @param groupEntity
     * @return
     */
    List<GroupEntity> getGroupPage(GroupEntity groupEntity);

    /**
     * 获取分组内成员
     * @param groupEntity
     * @return
     */
    List<UserEntity> getUserByGorupId(GroupEntity groupEntity);

    /**
     * 增加分组
     * @param groupEntity
     * @return
     */
    String addGroup(GroupEntity groupEntity);

    /**
     * 更新分组信息
     * @param groupEntity
     * @return
     */
    String updataGroup(GroupEntity groupEntity);

    /**
     * 删除分组
     * @param groupEntity
     * @return
     */
    String deleteGroup(GroupEntity groupEntity);

    /**
     * 增加分组人员
     * @param param
     * @return
     */
    String addUserGroup(GroupUsersParams param);


    /**
     * 删除分组人员
     * @param param
     * @return
     */
    String deleteUserGroup(GroupUsersParams param);

    /**
     * 获取表单分类列表
     * @return
     */
    List<OrgGroupTypeEntity> getAllOrgGroupTypeList();

    /**
     * 获取某一个分类信息
     * @param id
     * @return
     */
    OrgGroupTypeEntity getOrgGroupTypeById(String id);

    /**
     * 增加  分类
     * @param id
     * @param name
     * @param parentNo
     * @return
     */
    String addOrgGroupType(String id,String name,String parentNo);

    /**
     * 删除  分类
     * @param id
     * @return
     */
    String deleteOrgGroupTypeById(String id);

    /**
     * 修改
     * @param id
     * @param name
     * @param parentNo
     * @return
     */
    String updateOrgGroupType(String id,String name,String parentNo);
}